/********************************************************************
 * PROJECT: FOLIAGE PROJECT.
 * SUPPLIER: FOLIAGE TEAM.
 ********************************************************************
 * FILE: MutableTreeNode.java
 * (C) Copyright Foliage Team 2013, All Rights Reserved.
 ********************************************************************/
package org.foliage.common.structure;

/**
 * 一般有序树结点数据结构，父子表现式，且每个结点均带有唯一标识。 定义上下级结点关联功能。适用于易变的关联操作。
 * 
 * @author deathknight0718@gmail.com
 * @version 1.0.0
 */
public interface MutableTreeNode extends TreeNode {

	/**
	 * 增加指定的子结点实例至数组末尾。
	 * 
	 * @param treeNode 子结点实例。
	 */
	void add(MutableTreeNode treeNode);

	/**
	 * 通过指定的子结点序列号增加指定的子结点实例。
	 * 
	 * @param treeNode 子结点实例。
	 * @param index 子结点序列号。
	 */
	void add(MutableTreeNode treeNode, int index);

	/**
	 * 通过结点唯一标识移除子结点实例。
	 * 
	 * @param key 结点唯一标识。
	 */
	void remove(String key);

	/**
	 * 通过子结点序列号移除子结点实例。
	 * 
	 * @param index 子结点序列号。
	 */
	void remove(int index);

	/**
	 * 从父结点实例移除该实例。
	 */
	void removeFormParent();

	/**
	 * 设置父结点实例。
	 * 
	 * @param treeNode 父结点实例。
	 */
	void setParent(MutableTreeNode treeNode);

}
